#ifndef INCLUDE_PMM_H
#define INCLUDE_PMM_H

#include "multiboot.h"
#include "types.h"
// 线程栈的大小
#define STACK_SIZE 8192

// 支持的最大物理内存(512MB)
#define PMM_MAX_SIZE 0x20000000

// 物理内存页框大小
#define PMM_PAGE_SIZE 0x1000

// 最多支持的物理页面个数
#define PAGE_MAX_SIZE (PMM_MAX_SIZE / PMM_PAGE_SIZE)

// 动态分配物理内存页的总数
extern uint32_t physical_page_count;

// 页掩码 按照 4096 对齐地址
#define PHY_PAGE_MASK 0xFFFFF000
// 内核文件在内存中的起始和结束位置
// 在链接器脚本中要求链接器定义
extern uint8_t kernel_mem_start[];
extern uint8_t kernel_mem_end[];

// 输出 BIOS 提供的物理内存布局
void show_memory_map();
void init_pmm();
uint32_t pmm_alloc_page();

void pmm_free_page(uint32_t p);
#endif // INCLUDE_PMM_H